热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

余数|正数_FlinkWindow窗口开始结束时间分析源码探索

篇首语:本文由编程笔记#小编为大家整理,主要介绍了FlinkWindow窗口开始结束时间分析-源码探索相关的知识,希望对你有一定的参考价值。首先flink的窗口分配

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Flink Window窗口开始结束时间分析-源码探索相关的知识,希望对你有一定的参考价值。


首先 flink 的窗口分配是发生在 StreamTask 初始化的过程中。
核心方法是 TumblingProcessingTimeWindows.assignWindows(…)

// TODO : 在初始化StreamTask的时候需要分配好窗口
@Override
public Collection<TimeWindow> assignWindows(
Object element, long timestamp, WindowAssignerContext context)
final long now &#61; context.getCurrentProcessingTime();
// TODO : 默认情况下 staggerOffset &#61; 0
if (staggerOffset &#61;&#61; null)
staggerOffset &#61;
windowStagger.getStaggerOffset(context.getCurrentProcessingTime(), size);

// TODO : 获取窗口起始时间
long start &#61;
TimeWindow.getWindowStartWithOffset(
now, (globalOffset &#43; staggerOffset) % size, size);
return Collections.singletonList(new TimeWindow(start, start &#43; size));

可以通过这个方法往上点&#xff0c;会发现他是在StreamTask初始化的时候触发的。
这个方法调用了一个很重要的方法来计算窗口开始时间&#xff1a;TimeWindow.getWindowStartWithOffset(…)

/**
* Method to get the window start for a timestamp.
*
* &#64;param timestamp epoch millisecond to get the window start. 当前时间
* &#64;param offset The offset which window start would be shifted by. 窗口偏移
* &#64;param windowSize The size of the generated windows. 窗口大小
*
* &#64;return window start
*/

// TODO : 默认 offset &#61; 0
/**
* 1、如果 windowSize 是整秒&#xff0c;根据计算公式可知 当前时间-(当前时间&#43;窗口大小)%windowSize 得到的一定是一个整秒时间&#xff0c;以此类推可知整分钟、整小时都是这样
* 2、举例&#xff1a;整秒&#xff0c;如果windowSize是60的因数&#xff0c;那么窗口的排布是按照每分钟的00秒开始&#xff0c;其余的就不好说了
* 3、根据公式可知&#xff0c;一旦windowSize确定了&#xff0c;从以前到现在再到未来&#xff0c;所有的窗口都已经分布好了&#xff01; 当然如果配置了 offset 就另说了
*/

public static long getWindowStartWithOffset(long timestamp, long offset, long windowSize)
return timestamp - (timestamp - offset &#43; windowSize) % windowSize;
// TODO : 如果 offset &#61; 0&#xff0c;当前时间 - 当前时间除去windowSize的余数
// TODO : 如果 offset !&#61; 0且为正数, 由于 offset 不会大于 windowSize&#xff0c;所以会导致余数变小了&#xff0c;最终得到的窗口 startTime 变大了

注释里有我的简单总结&#xff0c;供参考。














创作打卡挑战赛


赢取流量/现金/CSDN周边激励大奖


推荐阅读
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • Flowable 流程图路径与节点展示:已执行节点高亮红色标记,增强可视化效果
    在Flowable流程图中,通常仅显示当前节点,而路径则需自行获取。特别是在多次驳回的情况下,节点可能会出现混乱。本文重点探讨了如何准确地展示流程图效果,包括已结束的流程和正在执行的流程。具体实现方法包括生成带有高亮红色标记的图片,以增强可视化效果,确保用户能够清晰地了解每个节点的状态。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
author-avatar
孙一诺她爹_480
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有